import {reqCartList, reqDeleteCartById, reqUpdateCheckedById} from "@/api";

const state = {
    cartList: [],
};
const mutations = {
    GET_CART_LIST(state, cartList) {
        state.cartList = cartList;
    }
};
const actions = {
    //获取购物车列表数据
    async getCartList({commit}) {
        let result = await reqCartList()
        if (result.code === 200) {
            commit('GET_CART_LIST', result.data)
        }
    },
    //删除购物车某一个产品
    async deleteCartListBySkuId({commit}, skuId) {
        let result = await reqDeleteCartById(skuId)
        if (result.code === 200) {
            return 'ok';
        } else {
            return new Promise.reject(new Error('failed'))
        }
    },
    //修改购物车某一个产品的选中状态
    async updateCheckedById({commit}, {skuId, isChecked}) {
        let result = await reqUpdateCheckedById(skuId, isChecked)
        if (result.code === 200) {
            return 'ok';
        } else {
            return new Promise.reject(new Error('failed'));
        }
    },
    //删除全部要勾选的产品
    deleteAllCheckedCart({dispatch, getters}) {
        let promiseAll = []
        //context: 小仓库, commit[提交mutations修改state] getters[计算属性] dispatch[派发action] state[当前仓库数据]
        getters.cartList.cartInfoList.forEach(item => {
            let promise = item.isChecked === 1 ? dispatch('deleteCartListBySkuId', item.skuId) : '';
            promiseAll.push(promise)
        })
        //只要全部的p1|p2...都成功, 返回结果即为成功, 否则为失败
        return Promise.all(promiseAll)
    },

    //修改全部产品的状态
    updateAllCartIsChecked({dispatch, state}, isChecked) {
        let promiseAll=[]
        state.cartList[0].cartInfoList.forEach(item => {
            let promise =  dispatch('updateCheckedById', {skuId: item.skuId, isChecked: isChecked})
            promiseAll.push(promise)
        })
        return Promise.all(promiseAll)
    },
};
const getters = {
    cartList(state) {
        return state.cartList[0] || {};
    }
    //计算出的购物车数据

};
export default {
    state,
    mutations,
    actions,
    getters,
}